# !/usr/bin/env python
# -*- coding: utf-8 -*-

from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, ElasticNet, Lasso
import numpy as np

# https://www.scikitlearn.com.cn/

# 创建数据
x = np.array([[1, 1], [1, 2], [2, 3], [2, 5]])
# y = np.array([5, 8, 11, 14])
y = np.array([2, 3, 5, 7])
# y = np.array([1, 2, 6, 10])
predict = np.array([[0, 0], [1, 1], [2, 2]])

if __name__ == '__main__':
    # 普通最小二乘法
    model = LinearRegression()
    # 拟合数据
    model.fit(x, y)
    # 预测新的数据点
    print("LinearRegression", model.predict(predict))

    # 实例化一个随机梯度下降回归对象
    model = SGDRegressor()
    # 拟合数据
    model.fit(x, y)
    # 预测新的数据点
    print("SGDRegressor", model.predict(predict))

    # 岭回归
    model = Ridge(alpha=0.5)
    # 拟合数据
    model.fit(x, y)
    # 预测新的数据点
    print("Ridge", model.predict(predict))

    # 实例化一个ElasticNet对象
    model = ElasticNet(alpha=0.5, l1_ratio=0.5)
    # 拟合数据
    model.fit(x, y)
    # 预测新的数据点
    print("ElasticNet", model.predict(predict))

    # 拟合稀疏系数的线性模型
    model = Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000, positive=False, precompute=False,
                  random_state=None, selection='cyclic', tol=0.0001, warm_start=False)
    # 拟合数据
    model.fit(x, y)
    # 预测新的数据点
    print("Lasso", model.predict(predict))